﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using DTO;
using System.Data.SqlClient;
namespace DAO
{
    public class ConfigDao
    {
        /// <summary>
        /// Đọc file config/config.xml và trả ra đối tượng ConfigDTO tương ứng.
        /// </summary>
        /// <returns></returns>
        public static ConfigDto ReadConfig()
        {
            ConfigDto config = new ConfigDto();
            XmlDocument doc = new XmlDocument();
            doc.Load(ConfigDto.ConfigFilePath);
            XmlElement eRoot = doc.DocumentElement;
            config.DatabaseName = eRoot.ChildNodes[0].InnerText;
            config.DataSource = eRoot.ChildNodes[1].InnerText;
            config.UserName = eRoot.ChildNodes[2].InnerText;
            config.Password = eRoot.ChildNodes[3].InnerText;
            return config;
        }

        /// <summary>
        /// Lưu thộng tin config vào file config/config.xml
        /// </summary>
        /// <param name="config">Thông tin cấu hình cầu lưu.</param>
        /// <returns>true nếu thành công,  false nếu không thất bại(không tìm được file cấu hình)</returns>
        public static bool SaveConfig(ConfigDto config)
        {
            try
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(ConfigDto.ConfigFilePath);
                XmlElement eRoot = doc.DocumentElement;
                eRoot.ChildNodes[0].InnerXml = config.DatabaseName;
                eRoot.ChildNodes[1].InnerXml = config.DataSource;
                eRoot.ChildNodes[2].InnerXml = config.UserName;
                eRoot.ChildNodes[3].InnerXml = config.Password;
                doc.Save(ConfigDto.ConfigFilePath);
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }


        /// <summary>
        /// Kiểm tra thử các thông tin config có hợp lệ hey không, với ngủ cảnh chương trình,
        /// các thông tin config chỉ là thông tin database connection.
        /// </summary>
        /// <param name="config"></param>
        /// <returns></returns>
        public static bool CheckConfig(ConfigDto config)
        {
            SqlConnection cnn = DataConnector.MakeConnection(config);
            if (cnn == null)
                return false;
            cnn.Close();
            return true;
        }
    }
}
